package cl.utfsm.isw.mecanico.cliente.dao;


import java.io.Reader;
import java.util.HashMap;
import java.util.List;

import cl.utfsm.isw.mecanico.cliente.to.ClienteTO;
import cl.utfsm.isw.mecanico.cliente.to.ClienteTO;

import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;

/**s
 * @author Juan Gonzalo
 *
 */
public class ClienteDAO {
	
	
	private static String SQLMAP = "tablas/cliente/sqlMapCliente.xml";
	/**
	 * 
	 * @param rut
	 * @return
	 * @throws Exception
	 */
	public ClienteTO consultarClienteRut(long rut) throws Exception{
		
		System.out.println("[ClienteDAO][consultarClienteRut] en ClienteDAO");
		ClienteTO clientes = null;
		
		try {
		
			HashMap parametros = new HashMap();
			parametros.put("rut", rut);
			
			System.out.println("[ClienteDAO][consultarClienteRut] parametros: "+parametros.toString());
			String resource = SQLMAP;
			Reader reader = Resources.getResourceAsReader(resource);
			SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
			
			List resultado = sqlMap.queryForList("consultarClientes", parametros);
			
			System.out.println("[ClienteDAO][consultarClienteRut] Salida: "+ resultado.toString());
			
			if (resultado != null) {            
				System.out.println("[ClienteDAO][consultarClienteRut] dentro de if");
	            if (resultado.size() > 0) {
	            	System.out.println("[ClienteDAO][consultarClienteRut] dentro de if");
	            	clientes = new ClienteTO();
	            	System.out.println("[ClienteDAO][consultarClienteRut] despues de crear cliente");
	                HashMap salida = (HashMap) resultado.get(0);
	                System.out.println("[ClienteDAO][consultarClienteRut] despues de casteo");
	                clientes.setRut((long ) salida.get("rut_Cliente"));                
	                clientes.setDv(((String)salida.get("dv_cliente")).charAt(0));
	                clientes.setNombre((String)salida.get("nombre"));
	                clientes.setDireccion((String) salida.get("direccion"));
	                clientes.setEmail((String) salida.get("mail"));
	            }
	            
			}		
			System.out.println("[ClienteDAO][consultarClienteRut] Retorno: "+ clientes.toString());		
			return clientes;
		}catch(Exception e){
			System.out.println("[ClienteDAO][consultarClienteRut] ERROR "+e.getStackTrace());
			return null;
		}		
	}
	

	/**
	 * 
	 * @param clienteIngreso
	 * @return
	 * @throws Exception
	 */
	public boolean ingresarCliente(ClienteTO clienteIngreso) throws Exception{
		
		System.out.println("[ClienteDAO][ingresarCliente] en ClienteDAO");
		try{
			HashMap parametros = new HashMap();
			parametros.put("rut", clienteIngreso.getRut());
			parametros.put("dv", String.valueOf(clienteIngreso.getDv()));
			parametros.put("nombre", clienteIngreso.getNombre());
			parametros.put("direccion", clienteIngreso.getDireccion());
			parametros.put("mail", clienteIngreso.getEmail());
			
			System.out.println("[ClienteDAO][ingresarCliente] parametros: "+parametros.toString());
			String resource = SQLMAP;
			Reader reader = Resources.getResourceAsReader(resource);
			SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
			
			List resultado = sqlMap.queryForList("ingresarCliente", parametros);
			
		}catch(Exception e){
			System.out.println("[ClienteDAO][ingresarCliente] ERROR : "+e.getStackTrace());
			throw e;
		}
		
		
		System.out.println("[ingresarCliente] datos : "+clienteIngreso.toString());
		
		return true;
	}
	
	
	/**
	 * 
	 * @param clienteElimina
	 * @return
	 * @throws Exception
	 */
	public boolean eliminarCliente(ClienteTO clienteElimina) throws Exception{
		
		System.out.println("[ClienteDAO][eliminarCliente] en ClienteDAO");
		try{
			HashMap parametros = new HashMap();
			parametros.put("rut", clienteElimina.getRut());
			parametros.put("dv", String.valueOf(clienteElimina.getDv()));		
			
			System.out.println("[ClienteDAO][eliminarCliente] parametros: "+parametros.toString());
			String resource = SQLMAP;
			Reader reader = Resources.getResourceAsReader(resource);
			SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
			
			List resultado = sqlMap.queryForList("eliminarCliente", parametros);
			
		}catch(Exception e){
			System.out.println("[ClienteDAO][eliminarCliente] ERROR : "+e.getStackTrace());
			throw e;
		}
		
		
		System.out.println("[eliminarCliente] datos : "+clienteElimina.toString());
		
		return true;
	}
	
	/**
	 * 
	 * @param clienteModificar
	 * @return
	 * @throws Exception
	 */
	public boolean modificarCliente(ClienteTO clienteModificar) throws Exception{
		
		System.out.println("[ClienteDAO][modificarCliente] en ClienteDAO");
		try{
			HashMap parametros = new HashMap();
			parametros.put("rut", clienteModificar.getRut());
			parametros.put("dv", String.valueOf(clienteModificar.getDv()));
			parametros.put("nombre", clienteModificar.getNombre());
			parametros.put("direccion", clienteModificar.getDireccion());
			parametros.put("mail", clienteModificar.getEmail());
			
			System.out.println("[ClienteDAO][modificarCliente] parametros: "+parametros.toString());
			String resource = SQLMAP;
			Reader reader = Resources.getResourceAsReader(resource);
			SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
			System.out.println("[ClienteDAO][modificarCliente] antes de realizar consulta.");
			List resultado = sqlMap.queryForList("modificarCliente", parametros);
			System.out.println("[ClienteDAO][modificarCliente] resultado : "+resultado.toString());
			int respuesta = 0;
			if (resultado != null) {
	                HashMap salida = (HashMap) resultado.get(0);
	                respuesta = (Integer)salida.get("respuesta");
			}
			System.out.println("[ClienteDAO][modificarCliente] respuesta: [["+respuesta+"]]");
			if (respuesta==1){
				return true;
			}else{
				return false;
			}
		}catch(Exception e){
			System.out.println("[ClienteDAO][modificarCliente] ERROR : "+e.getStackTrace());
			throw e;
		}		
	}
}
